// utils/errorHandlingExample.js - 统一错误处理使用示例

const {
  handleApiResponse,
  withErrorHandling,
} = require("./apiErrorHandler.js");

/**
 * 示例1：基本的API调用错误处理
 */
const exampleBasicErrorHandling = async () => {
  try {
    // 模拟API调用
    const response = await someApiCall();

    // 使用统一错误处理
    const result = handleApiResponse(response, {
      showToast: true, // 显示Toast提示
      showModal: false, // 不显示Modal
    });

    if (result.success) {
      console.log("操作成功:", result.data);
      // 处理成功逻辑
    } else {
      console.log("操作失败:", result.message);
      // 处理失败逻辑
    }
  } catch (error) {
    console.error("API调用异常:", error);
  }
};

/**
 * 示例2：使用错误处理包装器
 */
const createApiWithErrorHandling = () => {
  // 原始API函数
  const originalApiCall = async (params) => {
    // 实际的API调用逻辑
    return await someApiCall(params);
  };

  // 包装后的API函数，自动处理错误
  return withErrorHandling(originalApiCall, {
    showToast: true,
    showModal: false,
  });
};

/**
 * 示例3：在页面中使用统一错误处理
 */
const pageExample = {
  // 页面数据
  data: {
    loading: false,
    userInfo: null,
  },

  // 加载用户信息
  async loadUserInfo() {
    this.setData({ loading: true });

    try {
      const response = await getUserInfo();
      const result = handleApiResponse(response, {
        showToast: true,
        showModal: false,
      });

      if (result.success) {
        this.setData({
          userInfo: result.data,
          loading: false,
        });
      } else {
        this.setData({ loading: false });
        // 错误信息已经通过Toast显示
      }
    } catch (error) {
      this.setData({ loading: false });
      console.error("加载用户信息失败:", error);
    }
  },

  // 更新用户信息
  async updateUserInfo(userData) {
    try {
      const response = await updateUser(userData);
      const result = handleApiResponse(response, {
        showToast: true,
        showModal: false,
      });

      if (result.success) {
        // 更新成功，刷新数据
        this.loadUserInfo();
      }
      // 失败情况已通过Toast提示用户
    } catch (error) {
      console.error("更新用户信息失败:", error);
    }
  },
};

/**
 * 示例4：批量操作的错误处理
 */
const batchOperationExample = async () => {
  try {
    // 批量API调用
    const responses = await Promise.all([apiCall1(), apiCall2(), apiCall3()]);

    // 批量处理结果
    const result = handleBatchApiResponses(responses, {
      showToast: true,
    });

    if (result.success) {
      console.log("所有操作成功");
    } else {
      console.log("部分操作失败:", result.message);
    }
  } catch (error) {
    console.error("批量操作失败:", error);
  }
};

/**
 * 示例5：自定义错误处理选项
 */
const customErrorHandling = async () => {
  try {
    const response = await criticalApiCall();
    const result = handleApiResponse(response, {
      showToast: false, // 不显示Toast
      showModal: true, // 显示Modal
      defaultMessage: "关键操作失败，请联系管理员",
    });

    if (!result.success) {
      // 自定义错误处理逻辑
      console.log("关键操作失败:", result.message);
      // 可能需要跳转到错误页面或执行其他逻辑
    }
  } catch (error) {
    console.error("关键操作异常:", error);
  }
};

module.exports = {
  exampleBasicErrorHandling,
  createApiWithErrorHandling,
  pageExample,
  batchOperationExample,
  customErrorHandling,
};
